package com.wsoft.form.mapper;

import com.wsoft.form.dto.ColumnDataDTO;
import com.wsoft.form.dto.WfLinkWheresDTO;
import com.wsoft.form.dto.operation.JoinTableDTO;
import com.wsoft.form.dto.operation.OperationFilterDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author z001
 * @Date 2024/8/30 14:58
 */
public interface WfFormOperationMapper {

    /**
     * insert
     * @param tableName 表名
     * @param columnNames 字段列表
     * @param columnValueList 字段值列表
     */
    void insert(@Param("tableName") String tableName, @Param("columnNames") String columnNames, @Param("columnValueList") List<Object> columnValueList);

    /**
     * 修改数据
     * @param tableName
     * @param columnDataList
     */
    void updateById(@Param("tableName") String tableName, @Param("columnDataList") List<ColumnDataDTO> columnDataList);

    /**
     * 删除数据
     * @param tableName
     * @param idList
     */
    void delById(@Param("tableName") String tableName, @Param("idList") List<Long> idList);

    /**
     * 删除从表数据==> 根据字段名
     * @param tableName
     * @param columnName
     * @param idList
     */
    void delByColumnName(@Param("tableName") String tableName, @Param("columnName") String columnName, @Param("idList") List<Long> idList);

    /**
     * 分页查询
     * @param tableName 主表名称
     * @param selectFields 查询字段
     * @param joinInfoList 连接信息
     * @param filterList 过滤信息
     * @param groupBySql 分组
     * @param orderBySql 排序
     * @return
     */
    List<Map<String, Object>> pageList(@Param("tableName") String tableName , @Param("selectFields") String selectFields, @Param("joinInfoList")  List<JoinTableDTO> joinInfoList,
                                        @Param("filterList") List<OperationFilterDTO> filterList, @Param("groupBySql") String groupBySql, @Param("orderBySql") String orderBySql);

    /**
     * 查询关联表数据
     * @param tableName 表名称
     * @param selectFiledSql 查询字段
     * @param wheresList where字段
     * @return
     */
    List<Map<String, Object>> linkList(@Param("tableName")String tableName, @Param("selectFields")String selectFiledSql, @Param("wheresList") List<WfLinkWheresDTO> wheresList);

    /**
     * 获取数据详情
     * @param tableName
     * @param dataId
     * @return
     */
    Map<String, Object> getOperation(@Param("tableName") String tableName, @Param("dataId") Long dataId);

    /**
     * link表 关联查询
     * @param tableName
     * @param whereColumnName
     * @param selectColumnList
     * @param value
     * @return
     */
    List<Map<String, Object>> linkQuery(@Param("tableName") String tableName, @Param("whereColumnName") String whereColumnName, @Param("selectColumnList") List<String> selectColumnList, @Param("value") Object value);
}
